<?php
/*
 * template/popover.phtml
 */

use RHX\Helper\RHDateTime;
use RHX\Model\Object\XRules;
use RHX\Model\Object\EmployeTemplate;
?>
<?php
$codes	 = $this->codes;
$data	 = $this->data;
$code	 = $data['code'];
$entree	 = new RHDateTime();
$entree->setTime($data['entree']);
$sortie	 = new RHDateTime();
$sortie->setTime($data['sortie']);
?>
<div class='main-container'>
    <div class='content-left'>
	<div class='content-head'>
	    <h5>Code d'activités</h5>
	</div>
	<div class='content-body'>
	    <!-- CODES D'ACTIVITES -->
	    <?php foreach ($codes as $c) : ?>
    	    <div class="code-container <?php echo ((int) $c->id == (int) $code->id) ? 'selected' : 'none' ?>">
    		<a href="#" class="code-activite" data-code="<?php echo $c->id; ?>" style="background: <?php echo $c->couleur; ?>;"><?php echo $c->code ?></a>
    	    </div>
	    <?php endforeach; ?>
	</div>
	<div class='content-body'>
	    <!-- info -->
	    <?php $employe = $data['employe']; ?>
	    <span class="info-name"><b><?php echo $employe->prenom . ' ' . $employe->nom1 ?></b></span><br>
	    <span class="help-inline">Horaire Hebdomadaire : <?php echo $employe->getHoraireHebdo(true) . ' heure(s)' ?></span>
	    <span class="help-inline">Anciennete : <?php echo $employe->getAnciennete(true) ?></span>
	</div>
    </div>
    <div class='content-right'>
	<div class='content-head'>
	    <h5>Horaire</h5>
	</div>
	<div class='content-body'>
	    <!-- E/S -->
	    <div>Entrée</div>
	    <select id="entree_heure">
		<?php for ($i = 0; $i < 24; $i++): ?>
		    <?php $value = ($i < 10) ? '0' . $i : $i; ?>
    		<option value="<?php echo $value; ?>" <?php echo ($i == (int) $entree->getH()) ? 'selected="selected"' : ''; ?>><?php echo $value; ?></option>
		<?php endfor; ?>
	    </select>
	    <select id="entree_minute">
		<?php for ($i = 0; $i < 60; $i+= 5): ?>
		    <?php $value = ($i < 10) ? '0' . $i : $i; ?>
    		<option value="<?php echo $value; ?>" <?php echo ($i == (int) $entree->getM()) ? 'selected="selected"' : ''; ?>><?php echo $value; ?></option>
		<?php endfor; ?>
	    </select>
	    <div>Sortie</div>
	    <select id="sortie_heure">
		<?php for ($i = 0; $i < 24; $i++): ?>
		    <?php $value = ($i < 10) ? '0' . $i : $i; ?>
    		<option value="<?php echo $value; ?>" <?php echo ($i == (int) $sortie->getH()) ? 'selected="selected"' : ''; ?>><?php echo $value; ?></option>
		<?php endfor; ?>
	    </select>
	    <select id="sortie_minute">
		<?php for ($i = 0; $i < 60; $i+= 5): ?>
		    <?php $value = ($i < 10) ? '0' . $i : $i; ?>
    		<option value="<?php echo $value; ?>" <?php echo ($i == (int) $sortie->getM()) ? 'selected="selected"' : ''; ?>><?php echo $value; ?></option>
		<?php endfor; ?>
	    </select>
	    <hr>
	    <!-- P/R -->
	    <label>
		Pause <input type="checkbox" id="pause" <?php echo ($data['pause'] == 1) ? 'checked="checked"' : '' ?>>
	    </label>
	    <label>
		Repas <input type="checkbox" id="repas" <?php echo ($data['repas'] == 1) ? 'checked="checked"' : '' ?>>
	    </label>
	</div>
    </div>
    <hr>
    <div class='content-body'>
	<span>&nbsp;</span>
	<div style="float: right">
	    <a href='#' class='btn btn-success btn-small' id="valider"><span style="color: white">Valider</span>&nbsp;&nbsp;<i class="icon-white icon-check"></i></a>
	    <a href='#' class='btn btn-inverse btn-small' id="annuler"><span style="color: white">Annuler</span>&nbsp;&nbsp;<i class="icon-white icon-eject"></i></a>
	</div>
    </div>
</div>

<form id="form-edit">
    <input type="hidden" id="form-matricule" name="matricule" value="<?php echo $employe->matricule; ?>">
    <input type="hidden" id="form-prefix" name="prefix" value="<?php echo $this->prefix ?>">
    <input type="hidden" id="form-code" name="code" value="<?php echo $code->id; ?>">
    <input type="hidden" id="form-entree-heure" name="entree_heure" value="<?php echo $entree->getH(); ?>">
    <input type="hidden" id="form-entree-minute" name="entree_minute" value="<?php echo $entree->getM(); ?>">
    <input type="hidden" id="form-sortie-heure" name="sortie_heure" value="<?php echo $sortie->getH(); ?>">
    <input type="hidden" id="form-sortie-minute" name="sortie_minute" value="<?php echo $sortie->getM(); ?>">
    <input type="hidden" id="form-pause" name="pause" value="<?php echo $data['pause']; ?>">
    <input type="hidden" id="form-repas" name="repas" value="<?php echo $data['repas']; ?>">
    <input type="hidden" id="form-id" name="id" value="<?php echo $this->id; ?>">
</form>

<script type="text/javascript">
    $(function() {
	// annuler
	$('#annuler').click(function(e) {
	    e.preventDefault();
	    $('.template-edit').popover('hide');
	    return false;
	});
	// valider
	$('#valider').click(function(e) {
	    e.preventDefault();
	    matricule = $('#form-matricule').val();
	    prefix = $('#form-prefix').val();
	    code = $('#form-code').val();
	    heure = parseInt($('#form-entree-heure').val());
	    heure = (heure < 10) ? '0' + heure : heure;
	    minute = parseInt($('#form-entree-minute').val());
	    minute = (minute < 10) ? '0' + minute : minute;
	    entree =  heure + ':' + minute;
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    pause = $('#form-pause').val();
	    repas = $('#form-repas').val();
	    // Assignation
	    selector = '#' + matricule + '-' + prefix;
	    // interface
	    codec = getCode(code);
<?php if((int)$this->id == 0): ?>
	    $(selector + '-code').text(codec);
	    $(selector + '-entree').text(entree);
	    $(selector + '-sortie').text(sortie);
	    $(selector + '-pause').text((pause === '1') ? 'X' : '');
	    $(selector + '-repas').text((repas === '1') ? '1' : '');
	    // Interface classe CSS
	    $(selector + '-code').parent().removeClass().addClass(codec);
	    $(selector + '-entree').parent().removeClass().addClass(codec);
	    $(selector + '-sortie').parent().removeClass().addClass(codec);
	    $(selector + '-pause').parent().removeClass().addClass(codec);
	    $(selector + '-repas').parent().removeClass().addClass(codec);
	    // formulaire
	    selector = '#new-' + matricule + '-' + prefix;
	    $(selector + '-code').val(code);
	    $(selector + '-entree').val(entree);
	    $(selector + '-sortie').val(sortie);
	    $(selector + '-pause').val(pause);
	    $(selector + '-repas').val(repas);
<?php else: ?>
	    // Spécial edition
    	    selector = '#' + matricule + '-' + prefix;
    	    //alert(selector);
    	    $(selector + '-code a').text(codec);
    	    $(selector + '-entree a').text(entree);
    	    $(selector + '-sortie a').text(sortie);
    	    $(selector + '-pause a').text((pause === '1') ? 'X' : '');
    	    $(selector + '-repas a').text((repas === '1') ? '1' : '');
    	    // CSS
    	    $(selector + '-code').removeClass().addClass(codec);
    	    $(selector + '-entree').removeClass().addClass(codec);
    	    $(selector + '-sortie').removeClass().addClass(codec);
    	    $(selector + '-pause').removeClass().addClass(codec);
    	    $(selector + '-repas').removeClass().addClass(codec);
    	    ajax = $.ajax({
    		type: 'post',
    		url: '<?php echo $this->url('RHX/default', array('controller' => 'template', 'action' => 'save', 'id' => (int) $this->id)) ?>',
    		data: '&code=' + code + '&entree=' + entree + '&sortie=' + sortie + '&prefix=' + prefix + '&repas=' + repas + '&pause=' + pause
    	    });
    	    ajax.done(function(result) {
    		update = $.ajax({
    		    type: 'post',
    		    url: '<?php echo $this->url('RHX/default', array('controller' => 'calculator', 'action' => 'cumulTemplate')) ?>',
    		    data: '&id=<?php echo (int) $this->id; ?>&json=on&save=on'
    		});
    		update.done(function(data) {
    		    template = data.template;
    		    state = data.state;
    		    switch (state) {
    			case <?php echo EmployeTemplate::EQUAL ?>:
    			    $('#' + matricule + '-cumul').parent().removeClass().addClass('value-equal');
    			    break;
    			case <?php echo EmployeTemplate::GREATER_THAN ?>:
    			    $('#' + matricule + '-cumul').parent().removeClass().addClass('value-greater');
    			    break;
    			case <?php echo EmployeTemplate::LESS_THAN ?>:
    			    $('#' + matricule + '-cumul').parent().removeClass().addClass('value-less');
    			    break;
    		    }
    		    $('#' + matricule + '-cumul').hide().fadeIn('normal').html(template.heure_prevues);
    		});
    	    });
<?php endif; ?>

	    $('.template-edit').popover('hide');
	    return false;
	});
	// Clic sur un code activite
	$('.code-activite').click(function(e) {
	    e.preventDefault();
	    code = $(this).attr('data-code');
	    if (changeCode(code)) {
		$('.selected').removeClass('selected');
		$(this).parent().addClass('selected');
	    }
	});
	// clic sur pause
	$('#pause').change(function(e) {
	    e.preventDefault();
	    value = ($(this).prop('checked')) ? 1 : 0;
	    if (value === 0) {
		if (confirm("Voulez-vous enlever la pause ?")) {
		    $(this).prop('checked', false);
		    $('#form-pause').val(0);
		} else {
		    $(this).prop('checked', true);
		    $('#form-pause').val(1);
		}
	    } else {
		$('#form-pause').val(1);
	    }
	});
	// clic sur repas
	$('#repas').change(function(e) {
	    e.preventDefault();
	    value = ($(this).prop('checked')) ? 1 : 0;
	    if (value === 0) {
		if (confirm("Voulez-vous enlever le repas ?")) {
		    $(this).prop('checked', false);
		    $('#form-repas').val(0);
		} else {
		    $(this).prop('checked', true);
		    $('#form-repas').val(1);
		}
	    } else {
		$('#form-repas').val(1);
	    }
	});
	// Entrée heure
	$('#entree_heure').change(function() {
	    $('#form-entree-heure').val($(this).val());
	    entree = $('#form-entree-heure').val() + ':' + $('#form-entree-minute').val();
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	    verifyHours(entree, sortie);
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	});
	// Entrée minute
	$('#entree_minute').change(function() {
	    $('#form-entree-minute').val($(this).val());
	    entree = $('#form-entree-heure').val() + ':' + $('#form-entree-minute').val();
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	    verifyHours(entree, sortie);
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	});
	// Sortie heure
	$('#sortie_heure').change(function() {
	    $('#form-sortie-heure').val($(this).val());
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	    verifyHours(entree, sortie);
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	});
	// Sortie minute
	$('#sortie_minute').change(function() {
	    $('#form-sortie-minute').val($(this).val());
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	    verifyHours(entree, sortie);
	    //alert('Entrée : ' + entree + ' Sortie : ' + sortie);
	});
    });

    /**
     * Changement de code d'activité
     * 
     * @param {String} newCode Nouveau code
     */
    function changeCode(newCode) {
	anciennete = <?php echo $employe->getAncienneteValue(); ?>;
	erreur = false;
	newCode = parseInt(newCode);
	entree = $('#form-entree-heure').val() + ':' + $('#form-entree-minute').val();
	sortie = $('#form-sortie-heure').val() + ':' + $('#form-sortie-minute').val();
	switch (newCode) {
	    case <?php echo XRules::Present ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		break;
	    case <?php echo XRules::CongePaye ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::NeTravaillePas ?>:
		statePause(false);
		stateRepas(false);
		ResetHour();
		break;
	    case <?php echo XRules::Indisponible ?>:
		statePause(false);
		stateRepas(false);
		ResetHour();
		break;
	    case <?php echo XRules::Absent ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::CongeSansSolde ?>:
		statePause(true);
		stateRepas(true);
		ResetHour();
		putRepas(false);
		break;
	    case <?php echo XRules::TransfertEntrant ?>:
		showInfo("Le Code Transfert Entrant n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::TransfertSortant ?>:
		showInfo("Le Code Transfert Sortant n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::ArretMaladie1 ?>:
		putRepas(false);
		break;
	    case <?php echo XRules::ArretMaladie2 ?>:
		if (anciennete < 1.0) {
		    showError("L'employé <b><?php echo addslashes($employe->prenom) . ' ' . addslashes($employe->nom1) ?></b> a moins d'un an d'ancienneté<br>Le code <b>Arrêt Maladie 2</b> ne peut pas lui être affecté");
		    erreur = true;
		}
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::AccidentTravail ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::EcoleFormation ?>:
		showInfo("Le Code Ecole Formation n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::Ferie1 ?>:
		if (anciennete < 1.0) {
		    showError("L'employé <b><?php echo addslashes($employe->prenom) . ' ' . addslashes($employe->nom1) ?></b> a moins d'un an d'ancienneté<br>Le code <b>Férié 1</b> ne peut pas lui être affecté");
		    erreur = true;
		}
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putPause(false);
		putRepas(false);
		break;
	    case <?php echo XRules::Ferie2 ?>:
		if (anciennete < 1.0) {
		    showError("L'employé <b><?php echo addslashes($employe->prenom) . ' ' . addslashes($employe->nom1) ?></b> a moins d'un an d'ancienneté<br>Le code <b>Férié 2</b> ne peut pas lui être affecté");
		    erreur = true;
		}
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		break;
	    case <?php echo XRules::Ferie3 ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		break;
	    case <?php echo XRules::Fermer ?>:
		ResetHour();
		statePause(false);
		stateRepas(false);
		break;
	    case <?php echo XRules::CongeMaternite ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::DepartAnticipe ?>:
		showInfo("Le Code Départ Anticipé n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::Retard ?>:
		showInfo("Le Code Retard n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::ProblemeRetardDepartAnticipe ?>:
		showInfo("Le Code Probleme de Retard et de DepartAnticipe n'est pas assignable dans cet interface");
		erreur = true;
		break;
	    case <?php echo XRules::CongePayeExceptionnel ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::EcoleFormationIntegration ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::EcoleFormationAlternance ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::EcoleFormationEmploye ?>:
		statePause(true);
		stateRepas(true);
		verifyHours(entree, sortie);
		putRepas(false);
		break;
	    case <?php echo XRules::EntreeSortie ?>:
		showInfo("Le Code Entrée/Sortie n'est pas assignable manuellement");
		erreur = true;
		break;
	    default:
		showError("Code activité inconnue");
		erreur = true;
		break;
	}
	if (!erreur) {
	    $('#form-code').val(code);
	}
	return (!erreur) ? true : false;
    }
    /**
     * Mettre en pause ou non
     * 
     * @param {boolean} on
     */
    function putPause(on) {
	if (!on)
	    on = false;
	else
	    on = true;
	$("#pause").prop('checked', on);
	$('#form-pause').val((on) ? 1 : 0);
    }
    /**
     * Mettre le repas ou non
     * 
     * @param {boolean} on
     */
    function putRepas(on) {
	if (!on)
	    on = false;
	else
	    on = true;
	$("#repas").prop('checked', on);
	$('#form-repas').val((on) ? 1 : 0);
    }
    /**
     * Détermine l'état de la pause
     * 
     * @param {boolean} on
     */
    function statePause(on) {
	if (!on)
	    on = false;
	else
	    on = true;
	if (on) {
	    $('#pause').show();
	} else {
	    $('#pause').hide();
	    $('#form-pause').val(0);
	}
    }
    /**
     * Détermine l'état du repas
     * 
     * @param {boolean} on
     */
    function stateRepas(on) {
	if (!on)
	    on = false;
	else
	    on = true;
	if (on) {
	    $('#repas').show();
	} else {
	    $('#repas').hide();
	    $('#form-repas').val(0);
	}
    }
    /**
     * Vérification des horaires pour les Pauses et repas
     * 
     * @param {String} entree Heure d'entrée
     * @param {String} sortie Heure de sortie
     */
    function verifyHours(entree, sortie) {
	ajax = $.ajax({
	    type: 'post',
	    url: '<?php echo $this->url('RHX/default', array('controller' => 'calculator', 'action' => 'verifyHour')) ?>',
	    data: '&entree=' + entree + '&sortie=' + sortie,
	    async: false
	});
	ajax.done(function(result) {
	    if (result.pause) {
		putPause(true);
	    }
	    if (result.repas) {
		putRepas(true);
	    }
	});
    }
    /**
     * Remise à zéro des heures
     */
    function ResetHour() {
	// Entree Heure à Zéro
	$('#entree_heure option:selected').removeAttr('selected');
	$('#entree_heure option').each(function() {
	    if ($(this).val() === '00') {
		$(this).attr('selected');
		return false;
	    }
	});
	// Entree Minute à zéro
	$('#entree_minute option:selected').removeAttr('selected');
	$('#entree_minute option').each(function() {
	    if ($(this).val() === '00') {
		$(this).attr('selected');
		return false;
	    }
	});
	// Sortie Heure à Zéro
	$('#sortie_heure option:selected').removeAttr('selected');
	$('#sortie_heure option').each(function() {
	    if ($(this).val() === '00') {
		$(this).attr('selected');
		return false;
	    }
	});
	// Sortie Minute à zéro
	$('#sortie_minute option:selected').removeAttr('selected');
	$('#sortie_minute option').each(function() {
	    if ($(this).val() === '00') {
		$(this).attr('selected');
		return false;
	    }
	});
	$('#form-entree-heure').val("00");
	$('#form-entree-minute').val("00");
	$('#form-sortie-heure').val("00");
	$('#form-sortie-minute').val("00");

	return false;
    }

    /**
     * Définir les heures
     * 
     * @param {String} entree description
     * @param {String} entree description
     */
    function defineHour(entree, sortie) {
	entreeH = entree.substr(0, 2);
	entreeM = entree.substr(3, 2);
	sortieH = sortie.substr(0, 2);
	sortieM = sortie.substr(3, 2);
	// Heure Entree
	$("#entree_heure option").each(function() {
	    if ($(this).val() === entreeH) {
		$(this).prop('selected', 'selected');
		return false;
	    }
	});
	// Minute Entree
	$("#entree_minute option").each(function() {
	    if ($(this).val() === entreeM) {
		$(this).prop('selected', 'selected');
		return false;
	    }
	});
	// Heure Sortie
	$("#sortie_heure option").each(function() {
	    if ($(this).val() === sortieH) {
		$(this).prop('selected', 'selected');
		return false;
	    }
	});
	// Minute Sortie
	$("#sortie_minute option").each(function() {
	    if ($(this).val() === sortieM) {
		$(this).prop('selected', 'selected');
		return false;
	    }
	});
    }

    /**
     * Traduire un chiffre en code
     * 
     * @param {Integer} code Code à traduire
     * @return {String} Code
     */
    function getCode(code) {
	codec = new Array();
<?php foreach ($codes as $c): ?>
    	codec[<?php echo $c->id; ?>] = '<?php echo $c->code; ?>';
<?php endforeach; ?>
	code = parseInt(code);
	return codec[code];
    }
</script>

<style type='text/css'>
    .content-left{
	width: 390px;
	display: inline-table;
    }
    .content-right{
	width: 125px;
	display: inline-table;
	text-align: center;
	background: whitesmoke;
    }
    .code-container{
	width: 10%;
	margin: 2px;
	border: solid 1px #9a9a9a;
	display: inline-block;
	font-size: 0.9em;
    }
    .code-container:hover{
	border: solid 1px #000033;
	box-shadow: 0px 0px 7px 0px #1a1515;
    }
    .code-container a{
	display: block;
	width: 85%;
	text-align: center;
	margin: 5px auto;
    }
    .info-name{
	display: inline-block;
	width: 100%;
	text-align: center;
    }
    #entree_heure, #entree_minute, #sortie_heure, #sortie_minute{
	width: 45px;
    }
    .selected{
	border: solid 1px #000033;
	box-shadow: 0px 0px 7px 0px #1a1515;
    }
    .white-link{
	color: #fff;
    }
</style>